package com.zyj.java1;


/**
 * @program: JVMDemo
 * @ClassName StringTest
 * @author: YaJun
 * @Date: 2021 - 12 - 06 - 10:22
 * @Package: com.zyj.java1
 * @Description: 双亲委派机制
 * 工作原理：
 *      1. 如果一个类加载器收到了类加载的请求，它并不会自己先去加载，而是把这个请求委托给父类的加载器去执行
 *      2. 如果父类加载器还存在其父类加载器，则进一步向上委托，依次递归，请求最终达到顶层的启动类加载器
 *      3. 如果父类加载器可以完成类加载任务，就成功返回，倘若父类加载器无法完成此加载任务，子加载器才会尝试自己去加载
 *      这就是双亲委派模式。一个类只需要一个类加载器来加载。
 *      例如本例：StringTest类的加载器是应用类加载器，应用类加载器找到父类加载器扩展类加载器，扩展类加载器又找其父类加载器启动类加载器
 *      启动类加载器发现无法加载，则它的子类加载器扩展类加载器来加载，扩展类加载器加载不了，则由应用类加载器来加载
 *  优势（作用）：
 *      避免类的重复加载
 *      保护程序安全，防止核心API被随意篡改
 *          自定义类：java.lang.String
 *          自定义类：java.lang.TestZYJ
 */
public class StringTest {

    public static void main(String[] args) {
        java.lang.String s = new java.lang.String();

        System.out.println("hello world");

        StringTest test = new StringTest();
        System.out.println(test.getClass().getClassLoader());
    }

}
